package beans;

import bc.EfectivoDelegate;
import edu.upn.sigemfi.ope.be.Efectivo;
import edu.upn.sigemfi.ope.be.Ventanilla;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

public class EfectivoController {

    private EfectivoDelegate delegate;
    private Efectivo efectivo;
    private String criterio;
    private int moneda_001;

    public int getMoneda_001() {
        return moneda_001;
    }

    public void setMoneda_001(int moneda_001) {
        this.moneda_001 = moneda_001;
    }
    private int moneda_005;
    private int moneda_010;
    private int moneda_020;
    private int moneda_025;
    private int moneda_050;
    private int moneda_075;
    private int moneda_1;
    private int moneda_2;
    private int moneda_5;
    private int billete_1;
    private int billete_5;
    private int billete_10;
    private int billete_20;
    private int billete_50;
    private int billete_100;
    private int billete_200;

    public EfectivoController() {
        delegate = new EfectivoDelegate();
        efectivo = new Efectivo();
    }

    public String getCriterio() {
        return criterio;
    }

    public void setCriterio(String criterio) {
        this.criterio = criterio;
    }

    public Efectivo getEfectivo() {
        return efectivo;
    }

    public void setEfectivo(Efectivo efectivo) {
        this.efectivo = efectivo;
    }

    public int getBillete_1() {
        return billete_1;
    }

    public void setBillete_1(int billete_1) {
        this.billete_1 = billete_1;
    }

    public int getBillete_10() {
        return billete_10;
    }

    public void setBillete_10(int billete_10) {
        this.billete_10 = billete_10;
    }

    public int getBillete_100() {
        return billete_100;
    }

    public void setBillete_100(int billete_100) {
        this.billete_100 = billete_100;
    }

    public int getBillete_20() {
        return billete_20;
    }

    public void setBillete_20(int billete_20) {
        this.billete_20 = billete_20;
    }

    public int getBillete_200() {
        return billete_200;
    }

    public void setBillete_200(int billete_200) {
        this.billete_200 = billete_200;
    }

    public int getBillete_5() {
        return billete_5;
    }

    public void setBillete_5(int billete_5) {
        this.billete_5 = billete_5;
    }

    public int getBillete_50() {
        return billete_50;
    }

    public void setBillete_50(int billete_50) {
        this.billete_50 = billete_50;
    }

    public int getMoneda_005() {
        return moneda_005;
    }

    public void setMoneda_005(int moneda_005) {
        this.moneda_005 = moneda_005;
    }

    public int getMoneda_010() {
        return moneda_010;
    }

    public void setMoneda_010(int moneda_010) {
        this.moneda_010 = moneda_010;
    }

    public int getMoneda_020() {
        return moneda_020;
    }

    public void setMoneda_020(int moneda_020) {
        this.moneda_020 = moneda_020;
    }

    public int getMoneda_025() {
        return moneda_025;
    }

    public void setMoneda_025(int moneda_025) {
        this.moneda_025 = moneda_025;
    }

    public int getMoneda_050() {
        return moneda_050;
    }

    public void setMoneda_050(int moneda_050) {
        this.moneda_050 = moneda_050;
    }

    public int getMoneda_075() {
        return moneda_075;
    }

    public void setMoneda_075(int moneda_075) {
        this.moneda_075 = moneda_075;
    }

    public int getMoneda_1() {
        return moneda_1;
    }

    public void setMoneda_1(int moneda_1) {
        this.moneda_1 = moneda_1;
    }

    public int getMoneda_2() {
        return moneda_2;
    }

    public void setMoneda_2(int moneda_2) {
        this.moneda_2 = moneda_2;
    }

    public int getMoneda_5() {
        return moneda_5;
    }

    public void setMoneda_5(int moneda_5) {
        this.moneda_5 = moneda_5;
    }

    public String nuevo() {
        efectivo = new Efectivo();
        moneda_001 = 0;
        moneda_005 = 0;
        moneda_010 = 0;
        moneda_020 = 0;
        moneda_025 = 0;
        moneda_050 = 0;
        moneda_1 = 0;
        moneda_2 = 0;
        moneda_5 = 0;

        billete_1 = 0;
        billete_5 = 0;
        billete_10 = 0;
        billete_20 = 0;
        billete_50 = 0;
        billete_100 = 0;
        billete_200 = 0;


        return "habilitar";
    }

    public String edita() {
        return "editar";
    }

    public String cancelar() {
        efectivo = null;
        return "listar";
    }

    public Efectivo buscar(Long idEfectivo) {
        try {
            return delegate.buscar(idEfectivo);
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return null;
    }

    public String registrar() {
        try {
//            efectivo.setDenominacion("Moneda 001");
//            efectivo.setCantidadBilletes(moneda_001);
////            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 005");
//            efectivo.setCantidadBilletes(moneda_005);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 010");
//            efectivo.setCantidadBilletes(moneda_010);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 020");
//            efectivo.setCantidadBilletes(moneda_020);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 025");
//            efectivo.setCantidadBilletes(moneda_025);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 050");
//            efectivo.setCantidadBilletes(moneda_050);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 1");
//            efectivo.setCantidadBilletes(moneda_1);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 2");
//            efectivo.setCantidadBilletes(moneda_2);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Moneda 5");
//            efectivo.setCantidadBilletes(moneda_5);
//            delegate.crear(efectivo);
//            registraMoneda(moneda_001, "001");
//            registraMoneda(moneda_005, "005");
//            registraMoneda(moneda_010, "010");
//            registraMoneda(moneda_020, "020");

            registraMoneda(moneda_025, "025");
            registraMoneda(moneda_050, "050");
            registraMoneda(moneda_1, "1");
            registraMoneda(moneda_2, "2");
            registraMoneda(moneda_5, "5");



            registraBillete(billete_1, "1");
            registraBillete(billete_5, "5");
            registraBillete(billete_10, "10");
            registraBillete(billete_20, "20");
            registraBillete(billete_50, "50");
            registraBillete(billete_100, "100");
            registraBillete(billete_200, "200");




//            efectivo.setDenominacion("Billete 1");
//            efectivo.setCantidadBilletes(billete_1);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Billete 5");
//            efectivo.setCantidadBilletes(billete_5);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Billete 10");
//            efectivo.setCantidadBilletes(billete_10);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Billete 20");
//            efectivo.setCantidadBilletes(billete_20);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Billete 50");
//            efectivo.setCantidadBilletes(billete_50);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Billete 100");
//            efectivo.setCantidadBilletes(billete_100);
//            delegate.crear(efectivo);
//            efectivo.setDenominacion("Billete 200");
//            efectivo.setCantidadBilletes(billete_200);
//            delegate.crear(efectivo);


        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    private void registraMoneda(Integer cantidad, String denominacion) {
        if (cantidad == 0) {
            return;
        }
        try {
            Efectivo e = new Efectivo();
            e.setFidOpeVentanilla(efectivo.getFidOpeVentanilla());
            e.setFidOpeMoneda(efectivo.getFidOpeMoneda());
            e.setDenominacion("Moneda " + denominacion);
            e.setCantidadBilletes(cantidad);
            delegate.crear(e);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void registraBillete(Integer cantidad, String denominacion) {
        if (cantidad == 0) {
            return;
        }
        try {
            Efectivo e = new Efectivo();
            e.setFidOpeVentanilla(efectivo.getFidOpeVentanilla());
            e.setFidOpeMoneda(efectivo.getFidOpeMoneda());
            e.setDenominacion("Billete " + denominacion);
            e.setCantidadBilletes(cantidad);
            delegate.crear(e);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public SelectItem[] getEfectivoSI() {
        SelectItem[] select = null;
        try {
            List<Efectivo> lista = getEfectivos();
            if (lista != null) {
                select = new SelectItem[lista.size() + 1];
                int i = 0;
                select[i++] = new SelectItem(null, "Seleccione una Efectivo");
                for (Efectivo go : lista) {
                    select[i++] = new SelectItem(go, go.getIdEfectivo().toString());
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No se encontraron Efectivos");
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "Error al consultar los datos");
        }
        return select;
    }

    public SelectItem[] getVentanillaSI() {
        SelectItem[] select = null;
        try {
            List<Efectivo> lista = getEfectivos();
            if (lista != null) {
                select = new SelectItem[lista.size() + 1];
                int i = 0;
                select[i++] = new SelectItem(null, "Seleccione una Efectivo");
                for (Efectivo go : lista) {
                    select[i++] = new SelectItem(go, go.getIdEfectivo().toString());
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No se encontraron Efectivos");
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "Error al consultar los datos");
        }
        return select;
    }

    //Metodo para mostrar mensajes en la pagina
    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

    public List<Efectivo> getEfectivos() {
        try {
            return delegate.getEfectivos();
        } catch (Exception e) {

            e.printStackTrace();
        }
        return null;
    }

//    public List<Ventanilla> getVentanilla(){
//
//        try{
//        return delegate.g
//        }
//        catch
//                return null;
//
//
//
//    }
//
}
